package com.itheima.health.controller;

import com.itheima.health.common.MessageConst;
import com.itheima.health.common.RedisConst;
import com.itheima.health.entity.Result;
import com.itheima.health.utils.SMSUtils;
import com.itheima.health.utils.ValidateCodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 * @Author likepei
 * @Date 2020/4/5 22:23
 * @Version v1.0
 * @Description 手机验证码的控制器
 */
@RestController
@RequestMapping("/mobile/validateCode")
@Slf4j
public class ValidateCodeController {

    //jedisPool依赖注入
    @Autowired
    private JedisPool jedisPool;

    /**
     * 发送验证码 (预约订单)
     * @param telephone 手机号码
     * @return
     */
    @RequestMapping("/send4Order")
    public Result send4Order(String telephone){
        try {
            //生成短信验证码
            String code = ValidateCodeUtils.generateValidateCode4String(4);

            System.out.println("生成短信验证码code = " + code);

            //调用阿里云的发送短信的服务
            //SMSUtils.sendShortMessage(telephone, code);

            //验证码存入Redis, 加入过期时间, 用于后期的验证码对比
            Jedis jedis = jedisPool.getResource();
            /**
             * 参数一: 指定手机号码 + 发送短信的类型, 作为存入redis中的 键
             * 参数二: 指定 验证码 在redis中过期时间, 当时间到了, 该键值会在Redis中自动销毁
             * 参数三: 存入的验证码, 作为存入redis中的 值
             */
            jedis.setex(telephone + RedisConst.SENDTYPE_ORDER, 5*60, code);

            //发送短信验证码成功, 返回成功信息
            return new Result(true, MessageConst.SEND_VALIDATECODE_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            //发送短信验证码失败, 返回失败信息
            return new Result(false, MessageConst.SEND_VALIDATECODE_FAIL);
        }
    }

    /**
     * 发送验证码 (用户登录操作)
     * @param telephone 手机号码
     * @return
     */
    @RequestMapping("/send4Login")
    public Result send4Login(String telephone){
        try {
            //生成短信验证码
            String code = ValidateCodeUtils.generateValidateCode4String(6);

            System.out.println("生成短信验证码code = " + code);

            //调用阿里云的发送短信的服务
            //SMSUtils.sendShortMessage(telephone, code);

            //验证码存入Redis, 加入过期时间, 用于后期的验证码对比
            Jedis jedis = jedisPool.getResource();
            /**
             * 参数一: 指定手机号码 + 发送短信的类型, 作为存入redis中的 键
             * 参数二: 指定 验证码 在redis中过期时间, 当时间到了, 该键值会在Redis中自动销毁
             * 参数三: 存入的验证码, 作为存入redis中的 值
             */
            jedis.setex(telephone + RedisConst.SENDTYPE_LOGIN, 5*60, code);

            //发送短信验证码成功, 返回成功信息
            return new Result(true, MessageConst.SEND_VALIDATECODE_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            //发送短信验证码失败, 返回失败信息
            return new Result(false, MessageConst.SEND_VALIDATECODE_FAIL);
        }
    }

}
